/** @file
  Header file for HII Demo Application.

**/

#ifndef _HII_DEMO_H_
#define _HII_DEMO_H_

#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Library/HiiLib.h>
#include <Library/PrintLib.h>
#include <Library/DevicePathLib.h>

#include <Protocol/HiiConfigAccess.h>
#include <Protocol/FormBrowser2.h>
#include <Protocol/HiiString.h>
#include <Protocol/HiiDatabase.h>
#include <Protocol/HiiConfigRouting.h>

#include <Guid/MdeModuleHii.h>

//
// This is the generated IFR binary data for each formset defined in VFR.
//
extern UINT8 HiiDemoVfrBin[];

//
// This is the generated String package data for all .UNI files.
//
extern UINT8 HiiDemoStrings[];

#define HII_DEMO_FORMSET_GUID \
  { \
    0x85b75607, 0xf7ce, 0x471e, { 0xb7, 0xe4, 0x2a, 0xea, 0x5f, 0x72, 0x32, 0xee } \
  }

#define HII_DEMO_FORM_ID     0x1000

typedef struct {
  UINT8   CheckboxValue;
  UINT16  NumericValue;
  UINT16  OneOfValue;
  CHAR16  StringValue[20];
  UINT8   OrderedListValue[3];
  CHAR16  PasswordValue[16];
} HII_DEMO_CONFIGURATION;

//
// HII vendor device path node
//
typedef struct {
  VENDOR_DEVICE_PATH             VendorDevicePath;
  EFI_DEVICE_PATH_PROTOCOL       End;
} HII_VENDOR_DEVICE_PATH;

//
// Function prototypes
//
EFI_STATUS
EFIAPI
HiiDemoMain (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  );

EFI_STATUS
DisplayHiiForm (
  IN EFI_HII_HANDLE    HiiHandle
  );

#endif